package br.com.sis.rh.action;

import java.util.HashSet;
import java.util.Set;

import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import br.com.sis.rh.entity.Candidato;
import br.com.sis.rh.entity.CargoPretendido;
import br.com.sis.rh.enums.CamposAbasEnum;
import br.com.sis.rh.facade.CandidatoFacade;
import br.com.sis.rh.facade.CargoPretendidoFacade;
import br.com.sis.rh.util.ExpectativaProfissionalAux;
import br.com.sis.rh.vo.RetornoAjaxVO;

@Controller
@Scope("request")
@ParentPackage("json-default")
@Namespace(value = "/")
public class CargoPretendidoAction extends ComumAuxAction implements ComumAction {

	@Autowired
	private CandidatoFacade candidatoFacade;	
	
	@Autowired
	private CargoPretendidoFacade cargoPretendidoFacade;
	
	@Autowired
	private ExpectativaProfissionalAux expectativaProfissionalAux;
	
	private RetornoAjaxVO retornoAjax;
	
	private Candidato candidato;

	private CargoPretendido cargoPretendido;
	
	@Override
	@Action(value="incluirCargoPretendidoCandidato", results={
			@Result(name="success", type="json", params={"root","retornoAjax"})
	})
	public String incluir() {
		
		retornoAjax = new RetornoAjaxVO();
		
		Set<CargoPretendido> cargosPretendidos = new HashSet<>();
			
		cargosPretendidos.add(cargoPretendido);
			
		candidato.setCargoPretendido(cargosPretendidos);
			
		candidatoFacade.incluirCargoPretendido(candidato);
		
		Candidato listaRetorno = carregarListaPorCandidato(candidato, "cargoPretendido");
		
		listaRetorno.setPorcentagemPreenchidaExpectativa(calculaPorcentagemPreenchida(CamposAbasEnum.TOTAL_CAMPOS_EXPECTATIVA.getQuantidadeCampos(), expectativaProfissionalAux.atributosPreenchidos(listaRetorno)));
		
		retornoAjax.setObjetoRetornado(listaRetorno);
		retornoAjax.setStatusOperacao(SUCCESS);
		
		return SUCCESS;
	}

	@Override
	@Action(value="alterarCargoPretendidoCandidato", results={
			@Result(name="success", type="json", params={"root","retornoAjax"})
	})
	public String alterar() {
		retornoAjax = new RetornoAjaxVO();
		
		cargoPretendidoFacade.alterar(cargoPretendido);
		
		Candidato candidatoCargo = carregarListaPorCandidato(candidato, "cargoPretendido");
		
		candidatoCargo.setPorcentagemPreenchidaExpectativa(calculaPorcentagemPreenchida(CamposAbasEnum.TOTAL_CAMPOS_EXPECTATIVA.getQuantidadeCampos(), expectativaProfissionalAux.atributosPreenchidos(candidatoCargo)));
		
		retornoAjax.setObjetoRetornado(candidatoCargo);
		retornoAjax.setStatusOperacao(SUCCESS);
		
		return SUCCESS;
	}

	@Override
	@Action(value="excluirCargoPretendido", results={
			@Result(name="success", type="json", params={"root","retornoAjax"})
	})
	public String excluir() {
		retornoAjax = new RetornoAjaxVO();
		
		cargoPretendidoFacade.excluir(cargoPretendido);
		
		Candidato candidatoCargo = carregarListaPorCandidato(candidato, "cargoPretendido");
		
		if(candidatoCargo == null) {
			candidatoCargo = candidatoFacade.recuperarObjetoPorID(candidato);
		}
		
		candidatoCargo.setPorcentagemPreenchidaExpectativa(calculaPorcentagemPreenchida(CamposAbasEnum.TOTAL_CAMPOS_EXPECTATIVA.getQuantidadeCampos(), expectativaProfissionalAux.atributosPreenchidos(candidatoCargo)));
		
		retornoAjax.setObjetoRetornado(candidatoCargo);
		retornoAjax.setStatusOperacao(SUCCESS);
		
		return SUCCESS;
	}

	@Override
	@Action(value="listarCargoPretendido", results={
			@Result(name="success", type="json", params={"root","retornoAjax"})
	})
	public String listar() {
		retornoAjax = new RetornoAjaxVO();
		
		retornoAjax.setObjetoRetornado(carregarListaPorCandidato(candidato, "cargoPretendido"));
		retornoAjax.setStatusOperacao(SUCCESS);
		
		return SUCCESS;
	}
	
	@Action(value="recuperarCargoPretendido", results={
			@Result(name="success", type="json", params={"root","retornoAjax"})
	})
	public String carregarCargoPretendidoPorId() {
		
		retornoAjax = new RetornoAjaxVO();
		
		retornoAjax.setObjetoRetornado(cargoPretendidoFacade.recuperarObjetoPorID(cargoPretendido));
		retornoAjax.setStatusOperacao(SUCCESS);
		
		return SUCCESS;
	}

	public CandidatoFacade getCandidatoFacade() {
		return candidatoFacade;
	}

	public void setCandidatoFacade(CandidatoFacade candidatoFacade) {
		this.candidatoFacade = candidatoFacade;
	}

	public CargoPretendidoFacade getCargoPretendidoFacade() {
		return cargoPretendidoFacade;
	}

	public void setCargoPretendidoFacade(CargoPretendidoFacade cargoPretendidoFacade) {
		this.cargoPretendidoFacade = cargoPretendidoFacade;
	}

	public RetornoAjaxVO getRetornoAjax() {
		return retornoAjax;
	}

	public void setRetornoAjax(RetornoAjaxVO retornoAjax) {
		this.retornoAjax = retornoAjax;
	}

	public Candidato getCandidato() {
		return candidato;
	}

	public void setCandidato(Candidato candidato) {
		this.candidato = candidato;
	}

	public CargoPretendido getCargoPretendido() {
		return cargoPretendido;
	}

	public void setCargoPretendido(CargoPretendido cargoPretendido) {
		this.cargoPretendido = cargoPretendido;
	}
}
